# 网站服务程序 怎么每个HTTP请求（比如付费 HTTP 请求）对应的是哪个客户的呢？ 网站是怎么做到这点的呢？
# 一种常见的方式就是：通过 Session机制
# session 翻译成中文就是会话的意思
""" session 机制大体原理如下图所示 ："""
import requests

"""
用户使用客户端登录，服务端进行验证（比如验证用户名、密码）
验证通过后，服务端系统就会为这次登录创建一个session
session就是一个数据结构，保存该客户这次登录操作相关信息。通常保存在数据库中
同时创建一个唯一的sessionid（就是一个字符串），标志这个session(HTTP/1.1     200 OK
                                            Set-Cookie:sessionid=342SDF221)
然后，服务端通过HTTP响应，把sessionid告诉客户端
客户端在后续的HTTP请求消息头中，都要包含这个sessionid。这样服务端就会知道，这个请求对应哪个session，从而知道对应哪个客户
服务端是通过 HTTP的响应头 Set-Cookie 把产生的 sessionid 告诉客户端的

客户端的后续请求，是通过 HTTP的请求头 Cookie 告诉服务端它所持有的sessionid的
cookie 英文就是小甜饼的意思，这里表示一小段数据

HTTP 协议规定了， 网站服务端放HTTP响应中消息头 Set-Cookie 里面的数据， 叫做 cookie 数据， 浏览器客户端必须保存下来
而且后续访问该网站，必须在 HTTP的请求头 Cookie 中携带保存的所有cookie数据
"""

# 实例

def printResponse(response):

    print("\n***************** HTTP response  is    :     *********************\n")
    print(response.status_code)

    for k, v in response.headers.items():           #items() 是 Python 字典（dictionary）的一个方法，它返回一个视图对象，包含字典中所有的键值对（key-value pairs）
        print(f"{k}: {v}")
    print("     ")
    print(response.content.decode("utf-8"))
    print("\n*******************************************************************\n")


# 创建session对象
session  = requests.Session()

# 通过session对象发起请求1(登录系统)
response = session.post("http://127.0.0.1/api/mgr/signin",
                        data={
                            'username':'byhy',
                            'password':'88888888'
                        })
printResponse(response)
# 通过session对象发起请求2(查看用户)
response = session.get("http://127.0.0.1/api/mgr/customers?action=list_customer&pagenum=1&pagesize=5&keywords=&_=1758874496553")

printResponse(response)

# 转换为Python数据类型
py = response.json()
print(type(py))

print(py.get("retlist")[0].get("address"))              #打印出第一个客户地址

#测试git推送！！！